↳ ITRS
↳ ITRStoIDPProof
z
cond(TRUE, x, y) → 1@z
cond(FALSE, x, y) → *@z(2@z, log(x, *@z(y, y)))
logNat(TRUE, x, y) → cond(<=@z(x, y), x, y)
log(x, y) → logNat(&&(>=@z(x, 0@z), >=@z(y, 2@z)), x, y)
cond(TRUE, x0, x1)
cond(FALSE, x0, x1)
logNat(TRUE, x0, x1)
log(x0, x1)
↳ ITRS
↳ ITRStoIDPProof
↳ IDP
↳ UsableRulesProof
z
cond(TRUE, x, y) → 1@z
cond(FALSE, x, y) → *@z(2@z, log(x, *@z(y, y)))
logNat(TRUE, x, y) → cond(<=@z(x, y), x, y)
log(x, y) → logNat(&&(>=@z(x, 0@z), >=@z(y, 2@z)), x, y)
(0) -> (2), if ((*@z(y[0], y[0]) →* y[2])∧(x[0] →* x[2]))
(1) -> (0), if ((x[1] →* x[0])∧(y[1] →* y[0])∧(<=@z(x[1], y[1]) →* FALSE))
(2) -> (1), if ((x[2] →* x[1])∧(y[2] →* y[1])∧(&&(>=@z(x[2], 0@z), >=@z(y[2], 2@z)) →* TRUE))
cond(TRUE, x0, x1)
cond(FALSE, x0, x1)
logNat(TRUE, x0, x1)
log(x0, x1)
↳ ITRS
↳ ITRStoIDPProof
↳ IDP
↳ UsableRulesProof
↳ IDP
↳ IDPNonInfProof
z
(0) -> (2), if ((*@z(y[0], y[0]) →* y[2])∧(x[0] →* x[2]))
(1) -> (0), if ((x[1] →* x[0])∧(y[1] →* y[0])∧(<=@z(x[1], y[1]) →* FALSE))
(2) -> (1), if ((x[2] →* x[1])∧(y[2] →* y[1])∧(&&(>=@z(x[2], 0@z), >=@z(y[2], 2@z)) →* TRUE))
cond(TRUE, x0, x1)
cond(FALSE, x0, x1)
logNat(TRUE, x0, x1)
log(x0, x1)
(1) (y[2]=y[1]∧x[2]=x[1]∧<=@z(x[1], y[1])=FALSE∧y[1]=y[0]∧x[1]=x[0]∧&&(>=@z(x[2], 0@z), >=@z(y[2], 2@z))=TRUE ⇒ COND(FALSE, x[0], y[0])≥NonInfC∧COND(FALSE, x[0], y[0])≥LOG(x[0], *@z(y[0], y[0]))∧(UIncreasing(LOG(x[0], *@z(y[0], y[0]))), ≥))
(2) (<=@z(x[2], y[2])=FALSE∧>=@z(x[2], 0@z)=TRUE∧>=@z(y[2], 2@z)=TRUE ⇒ COND(FALSE, x[2], y[2])≥NonInfC∧COND(FALSE, x[2], y[2])≥LOG(x[2], *@z(y[2], y[2]))∧(UIncreasing(LOG(x[0], *@z(y[0], y[0]))), ≥))
(3) (-1 + x[2] + (-1)y[2] ≥ 0∧x[2] ≥ 0∧y[2] + -2 ≥ 0 ⇒ (UIncreasing(LOG(x[0], *@z(y[0], y[0]))), ≥)∧-1 + (-1)Bound + x[2] + (-1)y[2] ≥ 0∧-1 + (-1)y[2] + y[2]2 ≥ 0)
(4) (-1 + x[2] + (-1)y[2] ≥ 0∧x[2] ≥ 0∧y[2] + -2 ≥ 0 ⇒ (UIncreasing(LOG(x[0], *@z(y[0], y[0]))), ≥)∧-1 + (-1)Bound + x[2] + (-1)y[2] ≥ 0∧-1 + (-1)y[2] + y[2]2 ≥ 0)
(5) (y[2] + -2 ≥ 0∧-1 + x[2] + (-1)y[2] ≥ 0∧x[2] ≥ 0 ⇒ (UIncreasing(LOG(x[0], *@z(y[0], y[0]))), ≥)∧-1 + (-1)Bound + x[2] + (-1)y[2] ≥ 0∧-1 + (-1)y[2] + y[2]2 ≥ 0)
(6) (y[2] + -2 ≥ 0∧x[2] ≥ 0∧1 + y[2] + x[2] ≥ 0 ⇒ (UIncreasing(LOG(x[0], *@z(y[0], y[0]))), ≥)∧(-1)Bound + x[2] ≥ 0∧-1 + (-1)y[2] + y[2]2 ≥ 0)
(7) (y[2] ≥ 0∧x[2] ≥ 0∧3 + y[2] + x[2] ≥ 0 ⇒ (UIncreasing(LOG(x[0], *@z(y[0], y[0]))), ≥)∧(-1)Bound + x[2] ≥ 0∧1 + (3)y[2] + y[2]2 ≥ 0)
(8) (LOGNAT(TRUE, x[1], y[1])≥NonInfC∧LOGNAT(TRUE, x[1], y[1])≥COND(<=@z(x[1], y[1]), x[1], y[1])∧(UIncreasing(COND(<=@z(x[1], y[1]), x[1], y[1])), ≥))
(9) ((UIncreasing(COND(<=@z(x[1], y[1]), x[1], y[1])), ≥)∧0 ≥ 0∧0 ≥ 0)
(10) ((UIncreasing(COND(<=@z(x[1], y[1]), x[1], y[1])), ≥)∧0 ≥ 0∧0 ≥ 0)
(11) (0 ≥ 0∧0 ≥ 0∧(UIncreasing(COND(<=@z(x[1], y[1]), x[1], y[1])), ≥))
(12) (0 = 0∧0 ≥ 0∧0 = 0∧0 = 0∧(UIncreasing(COND(<=@z(x[1], y[1]), x[1], y[1])), ≥)∧0 ≥ 0∧0 = 0)
(13) (LOG(x[2], y[2])≥NonInfC∧LOG(x[2], y[2])≥LOGNAT(&&(>=@z(x[2], 0@z), >=@z(y[2], 2@z)), x[2], y[2])∧(UIncreasing(LOGNAT(&&(>=@z(x[2], 0@z), >=@z(y[2], 2@z)), x[2], y[2])), ≥))
(14) ((UIncreasing(LOGNAT(&&(>=@z(x[2], 0@z), >=@z(y[2], 2@z)), x[2], y[2])), ≥)∧0 ≥ 0∧0 ≥ 0)
(15) ((UIncreasing(LOGNAT(&&(>=@z(x[2], 0@z), >=@z(y[2], 2@z)), x[2], y[2])), ≥)∧0 ≥ 0∧0 ≥ 0)
(16) (0 ≥ 0∧(UIncreasing(LOGNAT(&&(>=@z(x[2], 0@z), >=@z(y[2], 2@z)), x[2], y[2])), ≥)∧0 ≥ 0)
(17) (0 = 0∧0 = 0∧0 = 0∧(UIncreasing(LOGNAT(&&(>=@z(x[2], 0@z), >=@z(y[2], 2@z)), x[2], y[2])), ≥)∧0 ≥ 0∧0 = 0∧0 ≥ 0)
POL(<=@z(x1, x2)) = -1
POL(LOGNAT(x1, x2, x3)) = -1 + x2 + (-1)x3
POL(>=@z(x1, x2)) = -1
POL(0@z) = 0
POL(*@z(x1, x2)) = x1·x2
POL(TRUE) = -1
POL(&&(x1, x2)) = 1
POL(2@z) = 2
POL(LOG(x1, x2)) = -1 + x1 + (-1)x2
POL(FALSE) = -1
POL(COND(x1, x2, x3)) = -1 + x2 + (-1)x3
POL(undefined) = -1
COND(FALSE, x[0], y[0]) → LOG(x[0], *@z(y[0], y[0]))
COND(FALSE, x[0], y[0]) → LOG(x[0], *@z(y[0], y[0]))
LOGNAT(TRUE, x[1], y[1]) → COND(<=@z(x[1], y[1]), x[1], y[1])
LOG(x[2], y[2]) → LOGNAT(&&(>=@z(x[2], 0@z), >=@z(y[2], 2@z)), x[2], y[2])
*@z1 ↔
&&(FALSE, FALSE)1 → FALSE1
&&(TRUE, TRUE)1 → TRUE1
&&(TRUE, FALSE)1 → FALSE1
&&(FALSE, TRUE)1 → FALSE1
↳ ITRS
↳ ITRStoIDPProof
↳ IDP
↳ UsableRulesProof
↳ IDP
↳ IDPNonInfProof
↳ IDP
↳ IDependencyGraphProof
z
(2) -> (1), if ((x[2] →* x[1])∧(y[2] →* y[1])∧(&&(>=@z(x[2], 0@z), >=@z(y[2], 2@z)) →* TRUE))
cond(TRUE, x0, x1)
cond(FALSE, x0, x1)
logNat(TRUE, x0, x1)
log(x0, x1)